﻿using System;
using System.Windows.Controls.Primitives;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using produccion.clases;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using produccion.vistamodelo;
using produccion.reportes;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMLectMat.xaml
    /// </summary>
    public partial class FRMLectMat : Window
    {
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral
        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataTable DtConsultaTmp;//FJRF - Usamos este DataTable para hacer consultas generales

        DataTable DtConsultaLotesIngresados;//FJRF - Usamos este DataTable para hacer los lotes ingresados

        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        String StrCaptionBox;//FJRF - Le ponemos un titulo a la ventana del mensaje
        String StrMensajeBox;//FJRF - Capturamos el mensaje a mostrar

        String StrClienteSeleccionado;//FJRF - Variable que tendra el cliente seleccionado para la manipulacion de los lotes
        String StrClienteSeleccionadoNuevo;//FJRF - Variable que tendra el cliente seleccionado para la manipulacion de los lotes que sean nuevos

        String StrClienteSeleccionadoPedido;//FJRF - Variable que tendra el cliente seleccionado para la manipulacion de los lotes
        String StrClienteSeleccionadoPedidoNuevo;//FJRF - Variable que tendra el cliente seleccionado para la manipulacion de los lotes que sean nuevos

        String StrLoteNuevoSeleccionado;//FJRF - Variable que tendra el lote seleccionado 
        String StrTipoLote;//FJRF - Para saber el tipo de lote

        String StrTipoAEliminar;//FJRF - Para saber el tipo de lote a eliminar

        public String StrClienteQueLlega;//FJRF - Variable que contiene el dato seleccionado en el formulario anterior [FRMadmorddes]

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            PttV_ConsultarLotes();//FJRF - Consultamos los lotes que existan ya cargados en el sistema

            DtConsultaLotesIngresados = new DataTable("DtConsultaLotesIngresados");//FJRF - Creamos la tabla
            DtConsultaLotesIngresados.Columns.Add("LOTES", System.Type.GetType("System.String"));//FJRF - Creamos el campo de los lotes

            BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
            LblTituloLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
            DtgLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
        }

        public FRMLectMat()
        {
            InitializeComponent();
        }

        private void datLeido_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Delete)
            {
                admorddes.Instance.total = admorddes.Instance.OrdenLeida.Count;
            }
        }
        protected void PttV_ConsultarLotes()
        {
            EjecutarSp_CARGARLOTEOR();

            StrConsulta = "SELECT LOTE_TMP AS LOTE, FECHA_TMP AS FECHA, CANPRO_TMP AS CANTIDAD, CODCLI_TMP AS CODCLI, NOMCLI_TMP AS CLIENTE, TIPO_TMP AS TIPO ";//FJRF - Seleccionamos solo los campos con los cuales vamos a trabajar
            StrConsulta = StrConsulta + "FROM TMPLOTEOR ORDER BY LOTE_TMP DESC";
           
            DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Enviamos las consulta para generar una tabla con los campos
            DtgLotesPedidosLeidos.ItemsSource = DtConsulta.DefaultView;//FJRF - Enviamos los datos consultados al grid

            String StrDatoConsultado = "", StrCodigoCliente = "";
            Double DblTotalCantidad = 0, DblTotalCantidadBuena = 0, DblTotalCantidadMala = 0, DblCantidadLotes = 0, DblCantidadDeLotesBuenos = 0, DblCantidadDeLotesMalos = 0;

            for (int IntFilaActual = 0; IntFilaActual < DtConsulta.Rows.Count; IntFilaActual++)//FJRF - Recorremos la informacion encontrada
            {
                StrDatoConsultado = DtConsulta.Rows[IntFilaActual][2].ToString();//FJRF - Extraemos el valor de cantidad en una variable q se pueda manipular mas facil
                StrCodigoCliente = DtConsulta.Rows[IntFilaActual][3].ToString();//FJRF - Extraemos el valor de cantidad en una variable q se pueda manipular mas facil

                if (String.IsNullOrEmpty(StrDatoConsultado) == true)
                {
                    StrDatoConsultado = "0";
                }
                DblTotalCantidad = DblTotalCantidad + Double.Parse(StrDatoConsultado);
                DblCantidadLotes++;

                if (StrCodigoCliente == "XXX")
                {
                    DblTotalCantidadMala = DblTotalCantidadMala + Double.Parse(StrDatoConsultado);
                    DblCantidadDeLotesMalos++;
                }
                else
                {
                    DblTotalCantidadBuena = DblTotalCantidadBuena + Double.Parse(StrDatoConsultado);
                    DblCantidadDeLotesBuenos++;
                }
            }
            LblLotesBuenos.Content = DblCantidadDeLotesBuenos;
            LblCantidadBuena.Content = DblTotalCantidadBuena;

            LblLotesMalos.Content = DblCantidadDeLotesMalos;
            LblCantidadMala.Content = DblTotalCantidadMala;

            LblTotalDeLotes.Content = DblCantidadLotes;
            LblTotalCantidad.Content = DblTotalCantidad;
        }
        private void butTer_Click(object sender, RoutedEventArgs e)
        {
            #region FJRF - PREGUNTAR SI QUIERE SALIR
            String StrCaptionBox = "Confirmation";
            String StrMensajeBox = "Esta seguro de salir sin seleccionar un cliente, si sale sin seleccionar un cliente no se cargaran los datos?";
            MessageBoxButton buttons = MessageBoxButton.YesNo;
            MessageBoxImage icon = MessageBoxImage.Question;
            #endregion

            if (admorddes.Instance.selcli != null)
            {
                if (admorddes.Instance.selcli.CODCLI_CLI == null)//FJRF - Si no ha seleccionado ningun dato hacemos lo siguiente
                {
                    if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)
                    {
                        //FJRF - Creamos las variables que necesitamos para el informe
                        try
                        {
                            this.Close();
                        }
                        catch (Exception ex) { MessageBox.Show(ex.Message); }
                    }
                    else
                    {
                        MessageBoxResult result = MessageBox.Show("Recuerde seleccionar un cliente", "PROCESO CANCELADO");
                    }
                }
                else//FJRF - Si tiene algun dato seleccionado hacemos lo siguiente
                {
                    admorddes.Instance.dtLotesIngresados = DtConsultaLotesIngresados.Copy();//FJRF - Enviamos los lotes ingresados a la nueva clase
                    admorddes.Instance.cargar();
                    this.Close();
                }
            }
            else
            {
                if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)
                {
                    //FJRF - Creamos las variables que necesitamos para el informe
                    try
                    {
                        this.Close();
                    }
                    catch (Exception ex) { MessageBox.Show(ex.Message); }
                }
                else
                {
                    MessageBoxResult result = MessageBox.Show("Recuerde seleccionar un cliente", "PROCESO CANCELADO");
                }
            }
        }

        private void txtOculto_GotFocus(object sender, RoutedEventArgs e)
        {
            this.txtLectura.Focus();
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - EstilosParaDataGrid
            //Style MyStyleTransparent = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            //MyStyleTransparent.Setters.Add(new Setter(BackgroundProperty, Brushes.Transparent));//FJRF - Decimos que el texto se ponga transparente para que tome las propiedades del grid

            //datLeido.Columns[0].CellStyle = MyStyleTransparent;
            //datLeido.Columns[1].CellStyle = MyStyleTransparent;
            //datLeido.Columns[2].CellStyle = MyStyleTransparent;

            Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

            datLeido.Columns[3].CellStyle = MyStyleTextAlignmentProperty;
            #endregion

            Keyboard.Focus(txtLectura);
        }

        private void datLeido_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }
        protected void Msgbox(String StrCaption, String StrMensaje, MessageBoxButton MsbTipoBoton, MessageBoxImage MsbTipoImagenIcono)
        {
            MessageBoxButton buttons;
            buttons = MsbTipoBoton;

            MessageBoxImage icon = MsbTipoImagenIcono;
            MessageBox.Show(StrMensaje, StrCaption, buttons, icon);
        }
        private void PrivV_LeerLotes(String StrLote, String StrTipo)
        {
            if (DtConsultaTmp != null)//FJRF - Si es diferente de nulo hacemos lo siguiente
            {
                if (DtConsultaTmp.Rows.Count > 0)//FJRF - Si hay datos hacemos lo siguiente
                {
                    if (String.IsNullOrEmpty(StrClienteSeleccionadoNuevo) == true)//FJRF - Si no hay un cliente seleccionado hacemos lo siguiente
                    {
                        Msgbox("PROCESO CANCELADO", "No hay datos seleccionados", MessageBoxButton.OK,MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                    }
                    else//FJRF - Si hay datos seleccionados hacemos lo siguiente
                    {
                        if (String.IsNullOrEmpty(StrClienteSeleccionado) == true)//FJRF - Si no hay cliente hacemos lo siguiente
                        {
                            if (String.IsNullOrEmpty(StrTipoLote) == true)//FJRF - Si no hay tipo hacemos lo siguiente
                            {
                                LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipo.ToUpper();
                                StrTipoLote = StrTipo;//FJRF - Asignamos el tipo a ser agregado

                                admorddes.Instance.strTipoOrden = StrTipoLote.Substring(0, 1);//FJRF - Asignamos el tipo de orden
                            }
                            else
                            {
                                LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipoLote.ToUpper();
                                if (StrTipoLote != StrTipo)
                                {
                                    Msgbox("PROCESO CANCELADO", "No se puede agregar el lote [ " + StrLote + " ] porque se esta trabajando con el tipo [ " + StrTipoLote + " ] y esta intentando agregar el tipo [ " + StrTipo + " ] y no son del mismo tipo.", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                                    return;//Nos salimos
                                }
                            }
                            PttV_AsignarDatosAlGrid();//FJRF - Asignamos los nuevos datos al grid
                        }
                        else//FJRF - Si si existe un cliente seleccionado hacemos lo siguiente
                        {
                            if (StrClienteSeleccionadoNuevo == StrClienteSeleccionado)//FJRF - Si el nuevo cliente es igual al cliente ya seleccionado hacemos lo siguiente
                            {
                                if (MessageBox.Show("¿Quiere agregar el lote [ " + StrLote + " ] nuevo lote en los datos ya ingresados?", "EL CLIENTE ES EL MISMO", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)//FJRF - Le preguntamos al usuario y si la respuesta es positiva a la pregunta hacemos lo siguiente
                                {
                                    if (String.IsNullOrEmpty(StrTipoLote) == true)//FJRF - Si no hay tipo hacemos lo siguiente
                                    {
                                        LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipo.ToUpper();
                                        StrTipoLote = StrTipo;//FJRF - Asignamos el tipo a ser agregado

                                        admorddes.Instance.strTipoOrden = StrTipoLote.Substring(0, 1);//FJRF - Asignamos el tipo de orden
                                    }
                                    else
                                    {
                                        LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipoLote.ToUpper();
                                        if (StrTipoLote != StrTipo)
                                        {
                                            Msgbox("PROCESO CANCELADO", "No se puede agregar el lote [ " + StrLote + " ] porque se esta trabajando con el tipo [ " + StrTipoLote + " ] y esta intentando agregar el tipo [ " + StrTipo + " ] y no son del mismo tipo.", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                                            return;//Nos salimos
                                        }
                                    }
                                    PttV_AsignarDatosAlGrid();//FJRF - Asignamos los nuevos datos al grid
                                }
                                else//FJRF - Si el usuario no quiere agregar un nuevo lote hacemos lo siguiente
                                {
                                    Msgbox("PROCESO CANCELADO", "No se agrego el lote seleccionado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                                }
                            }
                            else//FJRF - Si el cliente nuevo es diferente al cliente seleccionado entonces hacemos lo siguiete
                            {
                                if (MessageBox.Show("El cliente actual es [ " + StrClienteSeleccionado + " ] y este es un nuevo cliente [ " + StrClienteSeleccionadoNuevo + " ]... ¿Desea remplazar el nuevo lote seleccionado y eliminar los lotes anteriores con este nuevo cliente y tipo?", "EL CLIENTE ES DIFERENTE", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)//FJRF - Le preguntamos al usuario y si la respuesta es positiva a la pregunta hacemos lo siguiente
                                {
                                    DtConsultaLotesIngresados.Clear();//FJRF - Limpiamos los datos que puedan existir 

                                    admorddes.Instance.OrdenLeida.Clear();//FJRF - Limpiamos la lista para que solo se carguen los datos una sola vez

                                    StrTipoLote = StrTipo;//FJRF - Asignamos el tipo a ser agregado porque se estan limpiando los datos

                                    admorddes.Instance.strTipoOrden = StrTipoLote.Substring(0, 1);//FJRF - Asignamos el tipo de orden

                                    LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipoLote.ToUpper();

                                    PttV_AsignarDatosAlGrid();//FJRF - Asignamos los nuevos datos al grid

                                    StrClienteSeleccionadoPedido = StrClienteSeleccionadoPedidoNuevo;//FJRF - remplazamos el cliente con pedido igual
                                }
                                else
                                {
                                    Msgbox("PROCESO CANCELADO", "No se agrego el lote seleccionado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                                }
                            }
                        }
                    }
                }
            }
            else//FJRF - Si es nulo hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO","No se ha seleccionado un lote",MessageBoxButton.OK,MessageBoxImage.Stop);
            }

        }
        protected void PttV_AsignarDatosAlGrid()
        {
            #region FJRF - Variables
            String StrCodigoClienteLeido = "";//FJRF - El Codigo del cliente leido
            String StrCodigoPrimerCliente = "";//FJRF - Variable para capturar el primer cliente leido
            String StrCodigoClienteNuevo = "";//FJRF - Con este leemos el resto de clientes

            Boolean BooPrimerClienteEncontrado = false;//FJRF - Para saber que ya se encontro el primer cliente
            Boolean BooSeEncontroMasDeUnCliente = false;//FJRF - Variable que nos indicara si existe mas de un cliente en el archivo

            int IntLineaNumero = 0;//FJRF - Contamos los registros para cuando estamos buscando el cliente

            int IntClientesEncontrados = 0;//FJRF - Variable que contendra los clientes encontrados
            int IntClientesNoEncontrados = 0;//FJRF - Variable que contendra los clientes no encontrados

            Boolean BooTienePrecioEnCero = false;//Asumimos que todas tienen el precio bueno
            String StrDatosMalos = "";//FJRF - Guardamos los datos malos en una variable
            int IntContadorReferenciasMalas = 0;//FJRF - Para saber cuantas referencias malas existen
            #endregion

            #region FJRF - Averiguamos si existe un cliente repetido

            for (int IntFilaActual = 0; IntFilaActual < DtConsultaTmp.Rows.Count; IntFilaActual++)//FJRF - Recorremos la informacion encontrada
            {
                StrCodigoClienteLeido = DtConsultaTmp.Rows[IntFilaActual][0].ToString();//FJRF - Extraemos el valor de cantidad en una variable q se pueda manipular mas facil

                try//FJRF - Nos aseguramos que el proceso que se va a ejecutar no tenga error alguno
                {
                    StrCodigoClienteLeido = MdoGeneral.StrRetornarUnSoloCampo("CODCLI_EOP", "CODIGOCLIENTE", "ENCORDP", "NROORD_EOP = '" + StrCodigoClienteLeido + "'");//FJRF - Buscamos el dato y lo asignamos donde corresponde
                    if (StrCodigoClienteLeido == "DATO NO ENCONTRADO")//FJRF - Verificamos que exista algun dato
                    {
                        IntClientesNoEncontrados++;//FJRF - Vamos sumando los clientes no encontrados
                    }
                    else
                    {
                        if (BooPrimerClienteEncontrado == false)//FJRF - Si ya tenemos el primer cliente enconces
                        {
                            StrCodigoPrimerCliente = StrCodigoClienteLeido;//FJRF - Asignamos el primer cliente
                            StrCodigoClienteNuevo = StrCodigoClienteLeido;//FJRF - Asignamos el primer cliente como es el primer dato no importa pues los dos datos deben ser iguales

                            BooPrimerClienteEncontrado = true;//FJRF - Encontramos el primer cliente

                            IntClientesEncontrados = 1;//FJRF - Como es el primer dato encontrado y con el que vamos a trabajar aca la inicializamos
                        }
                        else
                        {
                            StrCodigoClienteNuevo = StrCodigoClienteLeido;//FJRF - Asignamos el siguiente cliente
                        }
                        if (StrCodigoPrimerCliente == StrCodigoClienteNuevo)
                        {
                            IntClientesEncontrados++;//FJRF - Vamos sumando los clientes encontrados
                        }
                        else
                        {
                            BooSeEncontroMasDeUnCliente = true;//FJRF - Informamos que se encontro un cliente

                            StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                            StrMensajeBox = "El archivo contiene más de un cliente, el cliente que se esta leyendo es: (" + StrCodigoPrimerCliente + ") - El nuevo cliente encontrado es: (" + StrCodigoClienteNuevo + ") y se encuentra en la linea número: (" + IntLineaNumero + ")";//FJRF - Capturamos el mensaje a mostrar
                            Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje

                            break;//FJRF - Nos salimos
                        }
                    }
                }
                catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                {
                    StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                    StrMensajeBox = ex.Message;//FJRF - Capturamos el mensaje a mostrar
                    Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje

                    return;//FJRF - Nos salimos
                }
            }

            if (BooPrimerClienteEncontrado == false)//FJRF - Si llega aca es que no se encontraron datos del cliente entonces hacemos lo siguiente
            {
                StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                StrMensajeBox = "No se encontro el cliente";//FJRF - Capturamos el mensaje a mostrar
                Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje

                return;//FJRF - Nos salimos
            }
            #endregion

            #region FJRF - Asignamos el cliente encontrado en el combo con el dato asignado en la variable ( StrCodigoPrimerCliente )
            if (BooSeEncontroMasDeUnCliente == false && BooPrimerClienteEncontrado == true)//FJRF - Si no se encontro Cliente repetido hacemos lo siguiente y si se encontraron datos
            {
                int IntIndex = -1;//FJRF - Creamos la variable que contendra el indice y lo inicializamos de la misma forma que comienza un combo
                foreach (produccion.clases.CLSMAECLIP item in CboClientes.Items)//FJRF - Recorremos el combo que es igual a la lista
                {
                    IntIndex++;//FJRF - Aumentamos el indice
                    if (item.CODCLI_CLI == StrCodigoPrimerCliente)//FJRF - Preguntamos si el dato del combo es igual al dato buscado del cliente y si son iguales hacemos lo siguiente
                    {
                        CboClientes.SelectedIndex = IntIndex;//FJRF - Ponemos el cliente en el indice que es
                        break;//FJRF - Nos salimos
                    }
                }
            }
            #endregion

            #region FJRF - Validamos que todas las referencias tengan precio (SE QUITA PARA QUE EL USUARIO PUEDA SEGUIR PERO EL PROCESO ESTA BUENO SI SE QUIERE HABILITAR NUEVAMENTE)
            //if (BooSeEncontroMasDeUnCliente == false)//FJRF - Si tiene un cliente valido entonces
            //{
            //    for (int IntFilaActual = 0; IntFilaActual < DtConsultaTmp.Rows.Count; IntFilaActual++)//FJRF - Recorremos la informacion encontrada
            //    {
            //        try//FJRF - Nos aseguramos que el proceso que se va a ejecutar no tenga error alguno
            //        {
            //            string StrOrden = DtConsultaTmp.Rows[IntFilaActual][0].ToString();//FJRF - Extraemos la informacion que necesitamos
            //            string StrReferencia = DtConsultaTmp.Rows[IntFilaActual][1].ToString();//FJRF - Extraemos la informacion que necesitamos
            //            string StrColor = DtConsultaTmp.Rows[IntFilaActual][2].ToString();//FJRF - Extraemos la informacion que necesitamos
            //            string StrTalla = DtConsultaTmp.Rows[IntFilaActual][3].ToString();//FJRF - Extraemos la informacion que necesitamos

            //            if (admorddes.Instance.PubDbl_Precio(StrReferencia, StrColor) == 0)
            //            {
            //                IntContadorReferenciasMalas++;
            //                BooTienePrecioEnCero = true;
            //                StrDatosMalos = StrDatosMalos + IntContadorReferenciasMalas.ToString().PadLeft(2,'0') + " - La referencia [ " + StrReferencia + " ] en color [ " + StrColor + " ] " + "\n";
            //            }
            //        }
            //        catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
            //        {
            //            StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
            //            StrMensajeBox = ex.Message;//FJRF - Capturamos el mensaje a mostrar
            //            Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje
            //        }
            //    }

            //    if (BooTienePrecioEnCero == true)
            //    {
            //        StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
            //        StrMensajeBox = "Las siguientes referencias tiene el precio en cero (0) " + "\n" + "\n" + StrDatosMalos;//FJRF - Capturamos el mensaje a mostrar
            //        Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Mostramos la ventana con el mensaje
            //    }
            //}
            #endregion

            #region FJRF - Asignamos los codigos encontrados en el grid

            if (BooSeEncontroMasDeUnCliente == false && BooTienePrecioEnCero == false)
            {
                for (int IntFilaActual = 0; IntFilaActual < DtConsultaTmp.Rows.Count; IntFilaActual++)//FJRF - Recorremos la informacion encontrada
                {
                    try//FJRF - Nos aseguramos que el proceso que se va a ejecutar no tenga error alguno
                    {
                        string StrOrden = DtConsultaTmp.Rows[IntFilaActual][0].ToString();//FJRF - Extraemos la informacion que necesitamos
                        string StrReferencia = DtConsultaTmp.Rows[IntFilaActual][1].ToString();//FJRF - Extraemos la informacion que necesitamos
                        string StrColor = DtConsultaTmp.Rows[IntFilaActual][2].ToString();//FJRF - Extraemos la informacion que necesitamos
                        string StrTalla = DtConsultaTmp.Rows[IntFilaActual][3].ToString();//FJRF - Extraemos la informacion que necesitamos

                        for (int i = 0; i < Convert.ToInt32(DtConsultaTmp.Rows[IntFilaActual][4]); i++)
                        {
                            admorddes.Instance.agregarLecAgregar(StrOrden, StrReferencia, StrColor, StrTalla);//FJRF - Cargamos los datos
                        }
                    }
                    catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                    {
                        StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                        StrMensajeBox = ex.Message;//FJRF - Capturamos el mensaje a mostrar
                        Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje
                    }
                }

                #region FJRF - Asignamos el lote encontrado

                DataRow DrNuevoLote;
                DrNuevoLote = DtConsultaLotesIngresados.NewRow();//FJRF - Agregamos una nueva fila
                DrNuevoLote["LOTES"] = StrLoteNuevoSeleccionado;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
                DtConsultaLotesIngresados.Rows.Add(DrNuevoLote);//FJRF - Agregamos a la tabla el registro creado
                DtConsultaLotesIngresados.TableName = "DtConsultaLotesIngresados";//FJRF - Le damos un nombre a la tabla creada para poder verla en el DataSet
                
                DtgLotesIngresados.ItemsSource = DtConsultaLotesIngresados.DefaultView;//FJRF - Enviamos los datos al grid

                #endregion

                BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el que asigna lotes invisible
                LblTituloLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                DtgLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible

                CboClientes.IsEnabled = false;
            }
            #endregion

        }
        private void BtnSubirDatosDesdeLote_Click(object sender, RoutedEventArgs e)
        {
            //PrivV_LeerLotes();
        }

        private void PrivV_LeerPlano()
        {
            #region FJRF - Variables
            String StrRutaPlanos;//FJRF - Variable que contiene la ruta donde esta el plano

            //StrRutaPlanos = "\\\\10.1.1.10\\planos\\DATOS.OR";//FJRF - Asignamos la ruta del plano (PARA PRUEBAS)
            StrRutaPlanos = "C:\\Users\\bfranciscor\\Desktop\\DATOS.OR";//FJRF - Asignamos la ruta del plano

            StreamReader objReader = new StreamReader(StrRutaPlanos);//FJRF - Instanciamos la ruta donde esta el plano
            string strLinea = "";//FJRF - Creamos una variable que contendra la linea que se esta leyendo, se inicia vacia

            String StrCodigoClienteLeido = "";//FJRF - El Codigo del cliente leido
            String StrCodigoPrimerCliente = "";//FJRF - Variable para capturar el primer cliente leido
            String StrCodigoClienteNuevo = "";//FJRF - Con este leemos el resto de clientes

            Boolean BooPrimerClienteEncontrado = false;//FJRF - Para saber que ya se encontro el primer cliente
            Boolean BooSeEncontroMasDeUnCliente = false;//FJRF - Variable que nos indicara si existe mas de un cliente en el archivo

            int IntLineaNumero = 0;//FJRF - Contamos los registros para cuando estamos buscando el cliente

            int IntClientesEncontrados = 0;//FJRF - Variable que contendra los clientes encontrados
            int IntClientesNoEncontrados = 0;//FJRF - Variable que contendra los clientes no encontrados
            #endregion

            #region FJRF - Averiguamos si existe un cliente repetido
            while (strLinea != null)//FJRF - Preguntamos si la linea es diferente de nulo hacemos lo siguiente
            {
                strLinea = objReader.ReadLine();//FJRF - Leemos la primera linea
                IntLineaNumero++;//FJRF - Contamos el registro 

                if (strLinea != null && strLinea.Trim().Length > 0)//FJRF - Preguntamos si la primera linea es diferente de algo nulo o vacio hacemos lo siguiente
                {
                    StrCodigoClienteLeido = strLinea.Substring(0, 6);//FJRF - Extraemos el codigo del cliente

                    try//FJRF - Nos aseguramos que el proceso que se va a ejecutar no tenga error alguno
                    {
                        StrCodigoClienteLeido = MdoGeneral.StrRetornarUnSoloCampo("CODCLI_EOP", "CODIGOCLIENTE", "ENCORDP", "NROORD_EOP = '" + StrCodigoClienteLeido + "'");//FJRF - Buscamos el dato y lo asignamos donde corresponde
                        if (StrCodigoClienteLeido == "DATO NO ENCONTRADO")//FJRF - Verificamos que exista algun dato
                        {
                            IntClientesNoEncontrados++;//FJRF - Vamos sumando los clientes no encontrados
                        }
                        else
                        {
                            if (BooPrimerClienteEncontrado == false)//FJRF - Si ya tenemos el primer cliente enconces
                            {
                                StrCodigoPrimerCliente = StrCodigoClienteLeido;//FJRF - Asignamos el primer cliente
                                StrCodigoClienteNuevo = StrCodigoClienteLeido;//FJRF - Asignamos el primer cliente como es el primer dato no importa pues los dos datos deben ser iguales

                                BooPrimerClienteEncontrado = true;//FJRF - Encontramos el primer cliente

                                IntClientesEncontrados = 1;//FJRF - Como es el primer dato encontrado y con el que vamos a trabajar aca la inicializamos
                            }
                            else
                            {
                                StrCodigoClienteNuevo = StrCodigoClienteLeido;//FJRF - Asignamos el siguiente cliente
                            }
                            if (StrCodigoPrimerCliente == StrCodigoClienteNuevo)
                            {
                                IntClientesEncontrados++;//FJRF - Vamos sumando los clientes encontrados
                            }
                            else
                            {
                                BooSeEncontroMasDeUnCliente = true;//FJRF - Informamos que se encontro un cliente

                                StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                                StrMensajeBox = "El archivo contiene más de un cliente, el cliente que se esta leyendo es: (" + StrCodigoPrimerCliente + ") - El nuevo cliente encontrado es: (" + StrCodigoClienteNuevo + ") y se encuentra en la linea número: (" + IntLineaNumero + ")";//FJRF - Capturamos el mensaje a mostrar
                                Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje

                                break;//FJRF - Nos salimos
                            }
                        }
                    }
                    catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                    {
                        StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                        StrMensajeBox = ex.Message;//FJRF - Capturamos el mensaje a mostrar
                        Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje
                    }
                }
            }
            objReader.Close();//FJRF - Al finalizar dejamos de leer el archivo y lo cerramos

            if (BooPrimerClienteEncontrado == false)//FJRF - Si llega aca es que no se encontraron datos del cliente entonces hacemos lo siguiente
            {
                StrCaptionBox = "PROCESO CANCELADO";//FJRF - Le ponemos un titulo a la ventana del mensaje
                StrMensajeBox = "No se encontro el cliente";//FJRF - Capturamos el mensaje a mostrar
                Msgbox(StrCaptionBox, StrMensajeBox, MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Mostramos la ventana con el mensaje
            }
            #endregion

            #region FJRF - Asignamos el cliente encontrado en el combo con el dato asignado en la variable ( StrCodigoPrimerCliente )
            if (BooSeEncontroMasDeUnCliente == false && BooPrimerClienteEncontrado == true)//FJRF - Si no se encontro Cliente repetido hacemos lo siguiente y si se encontraron datos
            {
                int IntIndex = -1;//FJRF - Creamos la variable que contendra el indice y lo inicializamos de la misma forma que comienza un combo
                foreach (produccion.clases.CLSMAECLIP item in CboClientes.Items)//FJRF - Recorremos el combo que es igual a la lista
                {
                    IntIndex++;//FJRF - Aumentamos el indice
                    if (item.CODCLI_CLI == StrCodigoPrimerCliente)//FJRF - Preguntamos si el dato del combo es igual al dato buscado del cliente y si son iguales hacemos lo siguiente
                    {
                        CboClientes.SelectedIndex = IntIndex;//FJRF - Ponemos el cliente en el indice que es
                        break;//FJRF - Nos salimos
                    }
                }
            }
            #endregion

            #region FJRF - Asignamos los codigos encontrados en el grid
            strLinea = "";//FJRF - Limpiamos la variable para la lectura del plano

            if (BooSeEncontroMasDeUnCliente == false && BooPrimerClienteEncontrado == true)//FJRF - Si no se encontro Cliente repetido hacemos lo siguiente y si se encontraron datos
            {
                objReader = new StreamReader(StrRutaPlanos);//FJRF - Instanciamos la ruta donde esta el plano

                while (strLinea != null)//FJRF - Preguntamos si la linea es diferente de nulo hacemos lo siguiente
                {
                    strLinea = objReader.ReadLine();//FJRF - Leemos la primera linea
                    if (strLinea != null && strLinea.Trim().Length > 0)//FJRF - Preguntamos si la primera linea es diferente de algo nulo o vacio hacemos lo siguiente
                    {
                        txtLectura.Focus();//FJRF - Ponemos el foco en el objeto a procesar
                        txtLectura.Text = strLinea;//FJRF - Ponemos el dato leido en el text para que valide segun las reglas de validacion que tiene
                        txtOculto.Focus();//FJRF - Quitamos el foco para que se ejecute el proceso de validacion que tienen al perder el foco
                    }
                }
                objReader.Close();//FJRF - Al finalizar dejamos de leer el archivo y lo cerramos
            }
            #endregion
        }

        private void BtnSubirDatos_Click(object sender, RoutedEventArgs e)
        {
            PrivV_LeerPlano();//FJRF - Subimos los datos
        }

        private void CboClientes_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (admorddes.Instance.selcli != null)
            {
                if (admorddes.Instance.selcli.CODCLI_CLI != null)
                {
                    txtLectura.IsEnabled = true;
                    StrClienteSeleccionado = admorddes.Instance.selcli.CODCLI_CLI;
                }
                else
                {
                    txtLectura.IsEnabled = false;
                    StrClienteSeleccionado = "";
                }
            }
        }
        private void DtgLotesPedidosLeidos_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            //Style MyStyle = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            //MyStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.Transparent));//FJRF - Decimos que el texto se ponga transparente para que tome las propiedades del grid

            //(e.Column as DataGridTextColumn).CellStyle = MyStyle;//FJRF - Asignamos el estilo creado

            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "CANTIDAD" || strNombreColumna == "LOTE")//FJRF - Estas son las columnas que tendran el formato
            {
                Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado
            }
            if (e.PropertyType == typeof(System.DateTime))//FJRF - Estas son las columnas que tendran el formato de fecha
            {
                (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";//FJRF - Asignamos el formato a la fecha
            }
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }

        private void DtgLotesPedidosLeidos_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            DependencyObject src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);//FJRF - Creamos una dependencia del objeto [DOBLE CLICK DATAGRID OJO EXELENTE FUNCION PARA QUE NO TOME EL DESPLAZAMIENTO COMO UN CLIC]

            if (src.GetType() == typeof(ContentPresenter))//FJRF - Comprueba si el usuario hace doble clic en una fila de la cuadrícula de datos [ContentPresenter]
            {
                String StrLote, StrFecha, StrCatidad, StrCodigoCliente, StrNombreCliente, StrLoteIngresado = "", StrTipo = "", StrClienteMasPedido = ""; ;//FJRF - Variables necesarias para el proceso
                Boolean BooLoteExiste = false;
                try
                {
                    if (DtgLotesPedidosLeidos.SelectedItem == null)//FJRF - Si no hay materiales seleccionados hacemos lo siguiente
                        return;//FJRF - Nos salimos

                    DataRowView dr = DtgLotesPedidosLeidos.SelectedItem as DataRowView;//FJRF - Creamos un DataRowView con el item seleccionado
                    DataRow dr1 = dr.Row;//FJRF - Cargamos las filas que tenga

                    StrLote = Convert.ToString(dr1.ItemArray[0]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                    StrFecha = Convert.ToString(dr1.ItemArray[1]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                    StrCatidad = Convert.ToString(dr1.ItemArray[2]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                    StrCodigoCliente = Convert.ToString(dr1.ItemArray[3]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
                    StrNombreCliente = Convert.ToString(dr1.ItemArray[4]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan

                    StrClienteMasPedido = StrNombreCliente;//FJRF - Esto es una validacion nuevo que se remplazo el nombre del cliente por este nuevo dato

                    StrTipo = Convert.ToString(dr1.ItemArray[5]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan

                    if (StrCodigoCliente == "XXX")//FJRF - Preguntamos si hay clientes malos hacemos lo siguiente
                    {
                        Msgbox("PROCESO CANCELADO", "El lote [ " + StrLote + " ] no se puede seleccionar tiene [ " + StrNombreCliente + " ]", MessageBoxButton.OK, MessageBoxImage.Stop);
                        BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el que asigna lotes invisible
                        LblTituloLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                        DtgLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible

                        StrClienteSeleccionadoNuevo = "";//FJRF - No se selecciono ningun cliente
                        StrClienteSeleccionadoPedidoNuevo = "";

                        StrLoteNuevoSeleccionado = "";//FJRF - No se selecciono ningun lote
                    }
                    else//FJRF - Sino hay clientes malos hacemos lo siguiente
                    {
                        for (int IntFilaActual = 0; IntFilaActual < DtConsultaLotesIngresados.Rows.Count; IntFilaActual++)//FJRF - Recorremos la informacion encontrada
                        {
                            StrLoteIngresado = DtConsultaLotesIngresados.Rows[IntFilaActual][0].ToString();//FJRF - Extraemos la informacion que necesitamos
                            if (StrLote == StrLoteIngresado)//FJRF - Si el lote seleccionado ya esta en el grid hacemos lo siguiente
                            {
                                BooLoteExiste = true;//FJRF - Informamos al sistema que el dato existe
                                break;//FJRF - Nos salimos del for
                            }
                        }

                        if (BooLoteExiste == false)//FJRF - Si el lote seleccionado no existe entonces hacemos lo siguiente
                        {
                            DtConsultaTmp = new DataTable();//FJRF - Creamos un nuevo manejador de consultas

                            StrConsulta = "SELECT NROORD_LPN AS Orden, CODREF_LPN AS Referencia, CODCOL_LPN AS Color, CODTAL_LPN AS Talla, CANPRO_LPN AS Cantidad ";
                            StrConsulta = StrConsulta + "FROM LECTPEND ";
                            StrConsulta = StrConsulta + "WHERE TIPO_LPN = 'OR' AND ESTADO_LPN = 'P' AND LOTE_LPN = '" + StrLote + "' ";
                            StrConsulta = StrConsulta + "ORDER BY NROORD_LPN, CODREF_LPN, CODCOL_LPN, CODTAL_LPN ";
                            DtConsultaTmp = MdoGeneral.consulta(StrConsulta);//FJRF - Traemos los datos consultados atravez de una funcion

                            DtgLoteSeleccionado.ItemsSource = DtConsultaTmp.DefaultView;

                            int IntCantidadRegistros = DtgLoteSeleccionado.Items.Count - 1;
                            LblTituloLoteSeleccionado.Content = "LOTE SELECCIONADO [ " + StrLote + " ] CANTIDAD [ " + StrCatidad + " ] REGISTROS [ " + IntCantidadRegistros + " ]";
                            BtnSubirDatosDesdeLote.Content = "Ingresar el lote [ " + StrLote + " ] ";

                            BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el que asigna lotes visible (En este punto se haria visible)
                            LblTituloLotesIngresados.Visibility = Visibility.Visible;//FJRF - Ponemos el que asigna lotes visible
                            DtgLotesIngresados.Visibility = Visibility.Visible;//FJRF - Ponemos el que asigna lotes visible

                            StrClienteSeleccionadoNuevo = StrCodigoCliente;//FJRF - almacenamos el nuevo cliente seleccionado
                            StrClienteSeleccionadoPedidoNuevo = StrClienteMasPedido;

                            StrLoteNuevoSeleccionado = StrLote;//FJRF - Almacenamos el lote seleccionado
                        }
                        else//FJRF - Si el lote ya ha sido ingresado hacemos lo siguiente
                        {
                            Msgbox("PROCESO CANCELADO", "El lote [ " + StrLote + " ] ya ha sido ingresado", MessageBoxButton.OK, MessageBoxImage.Stop);
                            BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el que asigna lotes invisible
                            LblTituloLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                            DtgLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible

                            StrClienteSeleccionadoNuevo = "";//FJRF - No se selecciono ningun cliente
                            StrClienteSeleccionadoPedidoNuevo = "";

                            StrLoteNuevoSeleccionado = "";//FJRF - No se selecciono ningun lote
                        }
                    }
                    if (String.IsNullOrEmpty(StrClienteSeleccionadoPedidoNuevo) == false)//FJRF - Si tiene datos hacemos lo siguiente
                    {
                        if (String.IsNullOrEmpty(StrClienteSeleccionadoPedido) == true)//FJRF - Si esta vacio es porque es primera vez
                        {
                            PrivV_LeerLotes(StrLote, StrTipo);//FJRF - Agregamos los lostes
                            StrClienteSeleccionadoPedido = StrClienteSeleccionadoPedidoNuevo;//FJRF - Agisnamos el cliente con pedido igual
                        }
                        else//FJRF - Si ya tiene datos hacemos lo siguiente
                        {
                            if (StrClienteSeleccionadoPedido == StrClienteSeleccionadoPedidoNuevo)//FJRF - Si el nuevo cliente es igual al anterior entonces hacemos lo siguiente
                            {
                                PrivV_LeerLotes(StrLote, StrTipo);//FJRF - Agregamos los lostes
                            }
                            else//FJRF - Si los datos son diferentes hacemos lo siguiente
                            {
                                StrMensajeBox = "Se esta trabajando con el proceso [ " + StrClienteSeleccionadoPedido + " ] y el lote seleccionado [ " + StrLote + " ] no es el mismo proceso [ " + StrClienteSeleccionadoPedidoNuevo + " ] deben de ser iguales, no se asigaron los datos del lote";

                                if (MessageBox.Show(StrMensajeBox + "... ¿Desea remplazar el nuevo lote seleccionado y eliminar los lotes anteriores con este nuevo cliente y tipo?", "EL CLIENTE ES DIFERENTE", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)//FJRF - Le preguntamos al usuario y si la respuesta es positiva a la pregunta hacemos lo siguiente
                                {
                                    DtConsultaLotesIngresados.Clear();//FJRF - Limpiamos los datos que puedan existir 

                                    admorddes.Instance.OrdenLeida.Clear();//FJRF - Limpiamos la lista para que solo se carguen los datos una sola vez

                                    StrTipoLote = StrTipo;//FJRF - Asignamos el tipo a ser agregado porque se estan limpiando los datos

                                    admorddes.Instance.strTipoOrden = StrTipoLote.Substring(0, 1);//FJRF - Asignamos el tipo de orden

                                    LblTituloTipo.Content = "Se esta trabajando con tipo => " + StrTipoLote.ToUpper();

                                    PttV_AsignarDatosAlGrid();//FJRF - Asignamos los nuevos datos al grid

                                    StrClienteSeleccionadoPedido = StrClienteSeleccionadoPedidoNuevo;//FJRF - remplazamos el cliente con pedido igual
                                }
                                else//FJRF - Si no quiere remplazar el lote entonces hacemos lo siguiente
                                {
                                    Msgbox("PROCESO CANCELADO", "No se agrego el lote seleccionado", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Le enviamos un mensaje al usuario
                                }

                            }
                        }
                    }
                    else//FJRF - Si no trae datos entonces hacemos lo siguiente
                    {
                        Msgbox("PROCESO CANCELADO", "El lote [ " + StrLote + " ] no tiene datos [ " + StrClienteSeleccionadoPedidoNuevo + " ] no se asigaron los datos del lote", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Informamos al usuario
                    }
                }
                catch (Exception ex)//FJRF - Si se presenta un error hacemos lo siguiente
                {
                    MessageBox.Show(ex.Message);//FJRF - Enviamos un mensaje al usuario
                    
                }
            }

        }

        private void DtgLoteSeleccionado_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            var MyStyle = new Style(typeof(DataGridCell)) { Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right) } };//FJRF - Establecemos el estilo que le pondremos a las columnas con formato

            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "CANTIDAD")//FJRF - Estas son las columnas que tendran el formato
            {
                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyle;//FJRF - Asignamos el estilo creado
            }
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }

        private void EjecutarSp_CARGARLOTEOR()//FJRF - Este procedimiento ejecuta un sp
        {
            try
            {
                MDOgeneral.spComando.CommandText = "SP_CARGARLOTEOR";
                MDOgeneral.spComando.Connection = MDOgeneral.conexion;
                MDOgeneral.spComando.CommandType = CommandType.StoredProcedure;
                MDOgeneral.spComando.Parameters.Clear();

                //Input

                //Output salidas
                MDOgeneral.spComando.Parameters.Add("pva_result", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.Parameters.Add("pva_errusu", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
        }

        private void DtgLotesIngresados_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            Style MyStyle = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
            MyStyle.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

            (e.Column as DataGridTextColumn).CellStyle = MyStyle;//FJRF - Asignamos el estilo creado
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }

        private void MenuEliminar_Click(object sender, RoutedEventArgs e)
        {
            if (DtgLotesPedidosLeidos.SelectedItem == null)//FJRF - Si no hay materiales seleccionados hacemos lo siguiente
                return;//FJRF - Nos salimos

            DataRowView dr = DtgLotesPedidosLeidos.SelectedItem as DataRowView;//FJRF - Creamos un DataRowView con el item seleccionado
            DataRow dr1 = dr.Row;//FJRF - Cargamos las filas que tenga

            StrTipoAEliminar = Convert.ToString(dr1.ItemArray[0]);//FJRF - Traemos los datos seleccionados en las columnas que se necesitan
            
            #region FJRF - ArmamosLaPregunta
            String StrCaptionBox = "Confirmation";
            String StrMensajeBox = "¿Desea eliminar el lote " + StrTipoAEliminar + " ?";
            MessageBoxButton buttons = MessageBoxButton.YesNo;
            MessageBoxImage icon = MessageBoxImage.Question;
            #endregion

            if (MessageBox.Show(StrMensajeBox, StrCaptionBox, buttons, icon) == MessageBoxResult.Yes)
            {
                try//FJRF - Controlamos el error
                {
                    Mouse.OverrideCursor = Cursors.Wait;//FJRF - Ponemos una esfera en timpo de espera

                    MDOgeneral.strConsultasTemporalesSql1 = "UPDATE LECTPEND SET ESTADO_LPN = 'X' WHERE LOTE_LPN = '" + StrTipoAEliminar + "' AND TIPO_LPN = 'OR' ";//FJRF - Armamos la consulta
                    MdoGeneral.comando(MDOgeneral.strConsultasTemporalesSql1);//FJRF - Ejecutamos la consulta

                    #region FJRF - ActualizamosLosDatos
                    DtgLotesPedidosLeidos.ItemsSource = null;//FJRF - Desvinculamos el objeto a los datos
                    DtConsulta = null;//FJRF - Limpiamos los datos
                    DtgLotesPedidosLeidos.Items.Clear();//FJRF - Limpiamos los items

                    PttV_ConsultarLotes();//FJRF - Consultamos los lotes que existan ya cargados en el sistema

                    DtConsultaLotesIngresados = new DataTable("DtConsultaLotesIngresados");//FJRF - Creamos la tabla
                    DtConsultaLotesIngresados.Columns.Add("LOTES", System.Type.GetType("System.String"));//FJRF - Creamos el campo de los lotes

                    BtnSubirDatosDesdeLote.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                    LblTituloLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                    DtgLotesIngresados.Visibility = Visibility.Hidden;//FJRF - Ponemos el ingresar lotes invisible
                    #endregion

                    MessageBox.Show("Se elimino el lote " + StrTipoAEliminar + " ", "PROCESO EXITOSO", MessageBoxButton.OK, MessageBoxImage.Information);//FJRF - Enviamos un mensaje al usuario

                    Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                }
                catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
                {
                    MessageBox.Show(ex.Message, "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                    Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
                }
            }
            else//FJRF - Si la respuesta es negativa
            {
                MessageBox.Show("No se elimino el lote " + StrTipoAEliminar + " ", "PROCESO CANCELADO", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                Mouse.OverrideCursor = Cursors.Arrow;//FJRF - Ponemos el cursor de forma normal nuevamente
            }
        }
    }
}
